<?php
class View extends VTemplate
{
    protected $_sub_mark = 'content';
    protected $_template;
    protected $_action;
    protected $_controller;

    # Khởi tạo View, yêu cầu tên controller (chỉ phần tên) và action
    public function __construct($controller, $action)
    {
        if (!isAjaxRequest()) {
            $this->_action = $action;
            $this->_controller = $controller;

            $templateFile = VIEWS_DIR . strtolower($this->_controller) . DS . $action . '.html';
            if (!file_exists($templateFile)) {
                throw new Exception("Template <strong>{$templateFile}</strong> không tồn tại!");
            }
            parent::__construct();
            parent::assign((array)$GLOBALS['config']->app, null, true);
            parent::assign('logged', isset($_SESSION['user']));
            parent::assign('admin', isset($_SESSION['user']) && $_SESSION['user']['type'] == 'admin');
            $this->_template = new VTemplate(null, $templateFile);
        } else {
            $this->_template = new VTemplate();
        }
    }

    /**
     * Gán cặp tên=>giá trị cho template con
     * @param string $name
     * @param string $value
     */
    function assign($name, $value = "", $wrap = false)
    {
        if (!$wrap) {
            $this->_template->assign($name, $value);
        } else {
            parent::assign($name, $value);
        }
    }

    /**
     * gán cặp tên=>giá trị cho template main
     * @param $name
     * @param string $value
     */
    function wrapAssign($name, $value = "")
    {
        parent::assign($name, $value);
    }

    public function render()
    {
        if (!isAjaxRequest()) {
            parent::assign($this->_sub_mark, $this->_template);
            $this->display(VIEWS_DIR . 'main.html');
        } else {
            echo $this->_template->json();
        }
    }
}